import { defineStore } from 'pinia'
import {login as loginApi} from "@/api/login.js";

// vue3使用pinia来状态管理,这是用户的状态管理
// 定义并导出 Store，ID 为 "user"
export const useMainStore=defineStore('main',{
    //状态定义
    state:()=>({
        userInfo:{
            avatarFile:'',
            createTime:'',
            email:'',
            loginTime:'',
            userId:'',
            username:'',
        },
        permissions:[],
        isLogin:false,
        token:'',
    }),

    // 计算属性（类似 Vuex 的 getter）
    getters: {
        // 获取用户名（自动处理未登录情况）
        username: (state) => state.name?state.name:'未登录',
    },

    // 方法（类似 Vuex 的 action，支持同步和异步）
    actions: {
        // 登录（异步示例，如调用接口）
        async login(loginForm) {
            try {
                const res =await  loginApi(loginForm);
                console.log(res);
                // 更新Store状态（响应式）
                if(res.code === '200') {
                    this.token = res.data.token;
                    this.userInfo = res.data.user;
                    this.isLogin = true;
                    // 持久化存储（防止刷新丢失）
                    localStorage.setItem('token', res.data.token);
                    localStorage.setItem('userInfo', JSON.stringify(res.data.user));
                    return res;
                }

            } catch (error) {
                // 5. 登录失败处理（清空状态，抛出错误供组件捕获）
                this.logout() // 失败时重置状态
                throw error // 组件中可通过try/catch捕获错误信息
            }
        },
        /**
         * 登出（清空状态和本地存储）
         */
        logout() {
            this.token = null
            this.userInfo = null
            this.isLogin = false
            localStorage.removeItem('token')
            localStorage.removeItem('userInfo')
        },

        /**
         * 从本地存储恢复状态（页面刷新后调用）
         */
        initUser() {
            const token = localStorage.getItem('token')
            const userInfo = localStorage.getItem('userInfo')
            if (token && userInfo) {
                this.token = token
                this.userInfo = JSON.parse(userInfo)
                this.isLogin = true
            }
        }

    }

})
